iOS 常用控件之UIMenuController

  • 初始化UIMenuItem
1
2
3
UIMenuItem *one = [[UIMenuItem alloc] initWithTitle:@"复制"action:@selector(menuOne:)];
UIMenuItem *two = [[UIMenuItem alloc] initWithTitle:@"删除"action:@selector(menuTwo:)];
UIMenuItem *three = [[UIMenuItem alloc] initWithTitle:@"转发"action:@selector(menuThree:)];
  • 初始化UIMenuController
1
2
3
4
5
6
7
8
9
UIMenuController *menu = [UIMenuController sharedMenuController];
//菜单箭头方向
menu.arrowDirection = UIMenuControllerArrowDefault;
//添加Item内容
[menu setMenuItems:[NSArray arrayWithObjects:one, two, three, nil]];
//设置位置与添加视图(可以给cell的frame)
[menu setTargetRect:CGRectMake(100, 100, 100, 20) inView:self.view];
//显示菜单MenuVisible:并且带动画animated:
[menu setMenuVisible:YES animated:YES];
  • 还有最关键的一点添加此方法
1
2
3
4
- (BOOL)canBecomeFirstResponder
{
return YES;
}
  • 实现方法
1
2
3
4
5
6
7
8
9
- (void)menuOne:(id)sender{
NSLog(@"复制");
}
- (void)menuTwo:(id)sender{
NSLog(@"删除");
}
- (void)menuThree:(id)sender{
NSLog(@"转发");
}
  • 完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//定义一个开关isOpen
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//返回与当前接收者有关的所有的触摸对象
NSSet *allTouches = [event allTouches];
//视图中的所有对象
UITouch *touch = [allTouches anyObject];
//返回触摸点在视图中的当前坐标
CGPoint point = [touch locationInView:[touch view]];

UIMenuItem *one = [[UIMenuItem alloc] initWithTitle:@"复制"action:@selector(menuOne:)];
UIMenuItem *two = [[UIMenuItem alloc] initWithTitle:@"删除"action:@selector(menuTwo:)];
UIMenuItem *three = [[UIMenuItem alloc] initWithTitle:@"转发"action:@selector(menuThree:)];

UIMenuController *menu = [UIMenuController sharedMenuController];
//菜单箭头方向(默认会自动判定)
menu.arrowDirection = UIMenuControllerArrowDefault;
//添加内容
[menu setMenuItems:[NSArray arrayWithObjects:one, two, three, nil]];
//设置位置
[menu setTargetRect:CGRectMake(point.x, point.y, 0, 0) inView:self.view];
//显示菜单并且带动画
[menu setMenuVisible:!isOpen animated:YES];
isOpen = !isOpen;
}

- (BOOL)canBecomeFirstResponder
{
return YES;
}

- (void)menuOne:(id)sender{
NSLog(@"复制");
}
- (void)menuTwo:(id)sender{
NSLog(@"删除");
}
- (void)menuThree:(id)sender{
NSLog(@"转发");
}

预览效果
4B648165-B8A7-4BB0-A018-312CD202D45D.png

-------------本文结束感谢阅读-------------